package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import mx.ipn.persistencia.FabricaDeDAOs;
import mx.ipn.persistencia.dao.BitacoraHorarioDAO;
import mx.ipn.persistencia.dao.EmpleadoDAO;
import mx.ipn.persistencia.dao.HorarioDAO;
import mx.ipn.persistencia.dao.UsuarioDAO;
import mx.ipn.to.BitacoraHorarioTO;
import mx.ipn.to.EmpleadoTO;
import mx.ipn.to.HorarioTO;
import mx.ipn.to.UsuarioTO;
import mx.ipn.to.FechaHoraTO;

public class BitacoraHorarioDAOMySQL implements BitacoraHorarioDAO {
	static {
		FabricaDeDAOsMySQL.iniciaLog(BitacoraHorarioDAOMySQL.class);
	}

	private static final String INSERT = "INSERT INTO bitacora_horario (fecha,id_horario,id_empleado,id_usuario) VALUES(?,?,?,?)";

	private static final String DELETE = "DELETE FROM bitacora_horario WHERE id_operacion=?";
	
	private static final String UPDATE = "UPDATE bitacora_horario SET fecha=?,id_horario=?,id_empleado=?,id_usuario=? WHERE id_operacion=?";

	private static final String FINDBYID = "SELECT * FROM bitacora_horario WHERE id_operacion=?";

	private static final String SELECT = "SELECT * FROM bitacora_horario";

	private static final String SELECTBYRANGOFECHA = "SELECT * FROM bitacora_horario WHERE fecha>=? AND fecha<=?";

	private static final String SELECTBYRANGOFECHAEMPLEADO = "SELECT * FROM bitacora_horario WHERE fecha>=? AND fecha<=? AND id_empleado=?";

	private static final String SELECTBYRANGOFECHAHORARIO = "SELECT * FROM bitacora_horario WHERE fecha>=? AND fecha<=? AND id_horario=?";

	private static final String SELECTBYRANGOFECHAUSUARIO = "SELECT * FROM bitacora_horario WHERE fecha>=? AND fecha<=? AND id_usuario=?";

	private static final String SELECTBYRANGOFECHAHORARIOEMPLEADO = "SELECT * FROM bitacora_horario WHERE fecha>=? AND fecha<=? AND id_horario=? AND id_empleado=?";

	
	
	@Override
	public short deleteBitacoraHorario(int idBitacoraHorario) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(DELETE);
			ps.setInt(1, idBitacoraHorario);
			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

	@Override
	public BitacoraHorarioTO findBitacoraHorarioById(int idOperacion) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYID);

			ps.setInt(1, idOperacion);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();
			HorarioDAO horarioDAO = fabricaMySQL.getHorarioDAO();
			EmpleadoDAO empleadoDAO = fabricaMySQL.getEmpleadoDAO();

			if (rs.next()) {
				idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");

				ArrayList<HorarioTO> listHorarioTO = new ArrayList<HorarioTO>();
				ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				HorarioTO horarioTO = horarioDAO.findHorarioById(rs
						.getInt("id_horario"));
				EmpleadoTO empleadoTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listHorarioTO.add(horarioTO);
				listEmpleadoTO.add(empleadoTO);
				listUsuarioTO.add(usuarioTO);

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);

				BitacoraHorarioTO bitacoraHorarioTO = new BitacoraHorarioTO(
						idOperacion, fecha, arrHorarioTO, arrEmpleadoTO,
						arrUsuarioTO);

				ps.close();
				conexion.close();
				return bitacoraHorarioTO;
			}
			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public int insertBitacoraHorario(BitacoraHorarioTO bitacoraHorarioTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(INSERT);

			ps.setDate(1, FechaHoraTO.getFecha(bitacoraHorarioTO.getFecha()));
			ps.setInt(2, bitacoraHorarioTO.getIdHorario());
			ps.setInt(3, bitacoraHorarioTO.getIdEmpleado());
			ps.setInt(4, bitacoraHorarioTO.getIdUsuario());

			ps.executeUpdate();

			// atrapa el indice del campo agregado
			int autoIncIndice = -1;
			ResultSet rs = ps.getGeneratedKeys();

			if (rs.next()) {
				autoIncIndice = rs.getInt(1);
			} else {
				System.err.print("No se pudo agregar campo");
				return 0;
			}

			ps.close();
			conexion.close();

			return autoIncIndice;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	@Override
	public ArrayList<BitacoraHorarioTO> selectBitacoraHorario() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

			HorarioDAO horarioDAO = fabricaMySQL.getHorarioDAO();
			EmpleadoDAO empleadoDAO = fabricaMySQL.getEmpleadoDAO();
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();

			ArrayList<BitacoraHorarioTO> coleccion = null;

			while (rs.next()) {
				if (coleccion == null)
					coleccion = new ArrayList<BitacoraHorarioTO>();

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");

				ArrayList<HorarioTO> listHorarioTO = new ArrayList<HorarioTO>();
				ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				HorarioTO horarioTO = horarioDAO.findHorarioById(rs
						.getInt("id_horario"));
				EmpleadoTO empleadoTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listHorarioTO.add(horarioTO);
				listEmpleadoTO.add(empleadoTO);
				listUsuarioTO.add(usuarioTO);

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);

				BitacoraHorarioTO bitacoraHorarioTO = new BitacoraHorarioTO(
						idOperacion, fecha, arrHorarioTO, arrEmpleadoTO,
						arrUsuarioTO);

				coleccion.add(bitacoraHorarioTO);
			}
			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraHorarioTO> selectByRangoFecha(Date inicio, Date fin) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHA);

			ps.setDate(1, inicio);
			ps.setDate(2, fin);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

			HorarioDAO horarioDAO = fabricaMySQL.getHorarioDAO();
			EmpleadoDAO empleadoDAO = fabricaMySQL.getEmpleadoDAO();
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();

			ArrayList<BitacoraHorarioTO> coleccion = null;

			while (rs.next()) {
				if (coleccion == null)
					coleccion = new ArrayList<BitacoraHorarioTO>();

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");

				ArrayList<HorarioTO> listHorarioTO = new ArrayList<HorarioTO>();
				ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				HorarioTO horarioTO = horarioDAO.findHorarioById(rs
						.getInt("id_horario"));
				EmpleadoTO empleadoTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listHorarioTO.add(horarioTO);
				listEmpleadoTO.add(empleadoTO);
				listUsuarioTO.add(usuarioTO);

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);

				BitacoraHorarioTO bitacoraHorarioTO = new BitacoraHorarioTO(
						idOperacion, fecha, arrHorarioTO, arrEmpleadoTO,
						arrUsuarioTO);

				coleccion.add(bitacoraHorarioTO);
			}
			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraHorarioTO selectByRangoFechaEmpleado(Date inicioFecha,
			Date finFecha, int idEmpleado) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			HorarioDAO horarioDAO = null;
			EmpleadoDAO empleadoDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<HorarioTO> listHorarioTO = null;
			ArrayList<EmpleadoTO> listEmpleadoTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraHorarioTO bitacoraHorarioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAEMPLEADO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idEmpleado);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHorarioTO = new ArrayList<HorarioTO>();
					listEmpleadoTO = new ArrayList<EmpleadoTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					horarioDAO = fabricaMySQL.getHorarioDAO();
					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listHorarioTO.add(horarioDAO.findHorarioById(rs
						.getInt("id_horario")));
				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listEmpleadoTO.add(empleadoDAO.findEmpleadoById(idEmpleado));

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);

				bitacoraHorarioTO = new BitacoraHorarioTO(arrIdOperacion,
						arrFecha, arrHorarioTO, arrEmpleadoTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraHorarioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraHorarioTO selectByRangoFechaHorario(Date inicioFecha,
			Date finFecha, int idHorario) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			HorarioDAO horarioDAO = null;
			EmpleadoDAO empleadoDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<HorarioTO> listHorarioTO = null;
			ArrayList<EmpleadoTO> listEmpleadoTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraHorarioTO bitacoraHorarioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORARIO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idHorario);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHorarioTO = new ArrayList<HorarioTO>();
					listEmpleadoTO = new ArrayList<EmpleadoTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					horarioDAO = fabricaMySQL.getHorarioDAO();
					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listEmpleadoTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado")));
				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listHorarioTO.add(horarioDAO.findHorarioById(idHorario));

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);

				bitacoraHorarioTO = new BitacoraHorarioTO(arrIdOperacion,
						arrFecha, arrHorarioTO, arrEmpleadoTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraHorarioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraHorarioTO selectByRangoFechaHorarioEmpleado(
			Date inicioFecha, Date finFecha, int idHorario, int idEmpleado) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			HorarioDAO horarioDAO = null;
			EmpleadoDAO empleadoDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<HorarioTO> listHorarioTO = null;
			ArrayList<EmpleadoTO> listEmpleadoTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraHorarioTO bitacoraHorarioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORARIOEMPLEADO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idHorario);
			ps.setInt(4, idEmpleado);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHorarioTO = new ArrayList<HorarioTO>();
					listEmpleadoTO = new ArrayList<EmpleadoTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					horarioDAO = fabricaMySQL.getHorarioDAO();
					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));

				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listHorarioTO.add(horarioDAO.findHorarioById(idHorario));
				listEmpleadoTO.add(empleadoDAO.findEmpleadoById(idEmpleado));

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);

				bitacoraHorarioTO = new BitacoraHorarioTO(arrIdOperacion,
						arrFecha, arrHorarioTO, arrEmpleadoTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraHorarioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraHorarioTO selectByRangoFechaUsuario(Date inicioFecha,
			Date finFecha, int idUsuario) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			HorarioDAO horarioDAO = null;
			EmpleadoDAO empleadoDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<HorarioTO> listHorarioTO = null;
			ArrayList<EmpleadoTO> listEmpleadoTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraHorarioTO bitacoraHorarioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAUSUARIO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idUsuario);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHorarioTO = new ArrayList<HorarioTO>();
					listEmpleadoTO = new ArrayList<EmpleadoTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					horarioDAO = fabricaMySQL.getHorarioDAO();
					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listEmpleadoTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado")));
				listHorarioTO.add(horarioDAO.findHorarioById(rs
						.getInt("id_horario")));
			}
			if (listIdOperacion != null) {
				listUsuarioTO.add(usuarioDAO.findUsuarioById(idUsuario));

				HorarioTO[] arrHorarioTO = (HorarioTO[]) listHorarioTO
						.toArray(new HorarioTO[listHorarioTO.size()]);
				EmpleadoTO[] arrEmpleadoTO = (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);

				bitacoraHorarioTO = new BitacoraHorarioTO(arrIdOperacion,
						arrFecha, arrHorarioTO, arrEmpleadoTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraHorarioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public short updateBitacoraHorario(BitacoraHorarioTO bitacoraHorarioTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setDate(1, FechaHoraTO.getFecha(bitacoraHorarioTO.getFecha()));
			ps.setInt(2, bitacoraHorarioTO.getIdHorario());
			ps.setInt(3, bitacoraHorarioTO.getIdEmpleado());
			ps.setInt(4, bitacoraHorarioTO.getIdUsuario());

			ps.setInt(5, bitacoraHorarioTO.getIdOperacion());

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

}
